{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# data handling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "import ccxt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['aax',\n",
       " 'ascendex',\n",
       " 'bequant',\n",
       " 'bibox',\n",
       " 'bigone',\n",
       " 'binance',\n",
       " 'binancecoinm',\n",
       " 'binanceus',\n",
       " 'binanceusdm',\n",
       " 'bit2c']"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ccxt.exchanges[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "#exchange = ccxt.gateio()\n",
    "exchange = ccxt.gateio()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "markets = exchange.load_markets()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'id': 'BTC_USDT',\n",
       " 'base': 'BTC',\n",
       " 'quote': 'USDT',\n",
       " 'fee': '0.2',\n",
       " 'min_base_amount': '0.0001',\n",
       " 'min_quote_amount': '1',\n",
       " 'amount_precision': '4',\n",
       " 'precision': '2',\n",
       " 'trade_status': 'tradable',\n",
       " 'sell_start': '0',\n",
       " 'buy_start': '0'}"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "markets['BTC/USDT']['info']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[1639922400000, 0.123798, 0.12492, 0.120898, 0.122276, 809464.8808856723],\n",
       " [1639926000000, 0.12235, 0.12356, 0.121666, 0.122294, 266477.612003161],\n",
       " [1639929600000, 0.122361, 0.124724, 0.109641, 0.111786, 2484544.688555346],\n",
       " [1639933200000, 0.111766, 0.114451, 0.111607, 0.112699, 487156.2636242045],\n",
       " [1639936800000, 0.112575, 0.113083, 0.10511, 0.110877, 760740.9529056046],\n",
       " [1639940400000, 0.111185, 0.112232, 0.108526, 0.110535, 367653.41106644075],\n",
       " [1639944000000, 0.110536, 0.114461, 0.11, 0.112868, 332452.2867395275],\n",
       " [1639947600000, 0.11341, 0.116272, 0.112588, 0.114826, 168831.37896901928],\n",
       " [1639951200000, 0.114828, 0.117365, 0.11361, 0.114, 269444.78434601205],\n",
       " [1639954800000, 0.11419, 0.114463, 0.110758, 0.112529, 366875.3387874912]]"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"\"\"\n",
    "[\n",
    "    1504541580000, // UTC timestamp in milliseconds, integer\n",
    "    4235.4,        // (O)pen price, float\n",
    "    4240.6,        // (H)ighest price, float\n",
    "    4230.0,        // (L)owest price, float\n",
    "    4230.7,        // (C)losing price, float\n",
    "    37.72941911    // (V)olume (in terms of the base currency), float\n",
    "],\n",
    "\"\"\"\n",
    "\n",
    "class ItemOfOHLCV:\n",
    "    timestamp: int\n",
    "    open: float\n",
    "    high: float\n",
    "    low: float\n",
    "    close: float\n",
    "    volume: float\n",
    "\n",
    "ohlcvData = exchange.fetch_ohlcv('PEOPLE/USDT', '1h', params={'price':'index'})\n",
    "ohlcvData[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [],
   "source": [
    "TOKEN = 'DOGE/USDT'\n",
    "startMonthTime = \"2019-10-01\"\n",
    "endMonthTime = \"2022-01-07\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['2019-10-01',\n",
       " '2019-11-01',\n",
       " '2019-12-01',\n",
       " '2020-01-01',\n",
       " '2020-02-01',\n",
       " '2020-03-01',\n",
       " '2020-04-01',\n",
       " '2020-05-01',\n",
       " '2020-06-01',\n",
       " '2020-07-01',\n",
       " '2020-08-01',\n",
       " '2020-09-01',\n",
       " '2020-10-01',\n",
       " '2020-11-01',\n",
       " '2020-12-01',\n",
       " '2021-01-01',\n",
       " '2021-02-01',\n",
       " '2021-03-01',\n",
       " '2021-04-01',\n",
       " '2021-05-01',\n",
       " '2021-06-01',\n",
       " '2021-07-01',\n",
       " '2021-08-01',\n",
       " '2021-09-01',\n",
       " '2021-10-01',\n",
       " '2021-11-01',\n",
       " '2021-12-01',\n",
       " '2022-01-01']"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def getEveryStartDayOfMonth(startDate: str, endDate: str):\n",
    "    import datetime\n",
    "    import calendar\n",
    "    start = datetime.datetime.strptime(startDate, \"%Y-%m-%d\")\n",
    "    end = datetime.datetime.strptime(endDate, \"%Y-%m-%d\")\n",
    "    while start <= end:\n",
    "        yield start.strftime(\"%Y-%m-%d\")\n",
    "        start += datetime.timedelta(days=calendar.monthrange(start.year, start.month)[1])\n",
    "\n",
    "startPointOfMonths = list(getEveryStartDayOfMonth(startMonthTime, endMonthTime))\n",
    "startPointOfMonths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('2019-09-23', '2019-10-08'),\n",
       " ('2019-10-24', '2019-11-08'),\n",
       " ('2019-11-23', '2019-12-08'),\n",
       " ('2019-12-24', '2020-01-08'),\n",
       " ('2020-01-24', '2020-02-08'),\n",
       " ('2020-02-22', '2020-03-08'),\n",
       " ('2020-03-24', '2020-04-08'),\n",
       " ('2020-04-23', '2020-05-08'),\n",
       " ('2020-05-24', '2020-06-08'),\n",
       " ('2020-06-23', '2020-07-08'),\n",
       " ('2020-07-24', '2020-08-08'),\n",
       " ('2020-08-24', '2020-09-08'),\n",
       " ('2020-09-23', '2020-10-08'),\n",
       " ('2020-10-24', '2020-11-08'),\n",
       " ('2020-11-23', '2020-12-08'),\n",
       " ('2020-12-24', '2021-01-08'),\n",
       " ('2021-01-24', '2021-02-08'),\n",
       " ('2021-02-21', '2021-03-08'),\n",
       " ('2021-03-24', '2021-04-08'),\n",
       " ('2021-04-23', '2021-05-08'),\n",
       " ('2021-05-24', '2021-06-08'),\n",
       " ('2021-06-23', '2021-07-08'),\n",
       " ('2021-07-24', '2021-08-08'),\n",
       " ('2021-08-24', '2021-09-08'),\n",
       " ('2021-09-23', '2021-10-08'),\n",
       " ('2021-10-24', '2021-11-08'),\n",
       " ('2021-11-23', '2021-12-08'),\n",
       " ('2021-12-24', '2022-01-08')]"
      ]
     },
     "execution_count": 181,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def getTimeRangeOfADateWithinXDays(date: str, x: int):\n",
    "    import datetime\n",
    "    halfRange = x/2\n",
    "    start = datetime.datetime.strptime(date, \"%Y-%m-%d\") - datetime.timedelta(hours=halfRange*24)\n",
    "    end = start + datetime.timedelta(hours=halfRange*24*2)\n",
    "    return start.strftime(\"%Y-%m-%d\"), end.strftime(\"%Y-%m-%d\")\n",
    "\n",
    "dateRangeFor3DaysInEveryStartDayOfMonth = [getTimeRangeOfADateWithinXDays(startPointOfMonths[i], 15) for i,_ in enumerate(startPointOfMonths)]\n",
    "dateRangeFor3DaysInEveryStartDayOfMonth"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {},
   "outputs": [],
   "source": [
    "def dateTimeToUnixTime(date: str):\n",
    "    import datetime\n",
    "    return int(datetime.datetime.strptime(date, \"%Y-%m-%d\").timestamp() * 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "metadata": {},
   "outputs": [],
   "source": [
    "ohlcvData = []\n",
    "for range in dateRangeFor3DaysInEveryStartDayOfMonth:\n",
    "    ohlcvData += exchange.fetch_ohlcv(TOKEN, '1h', params={'price':'index'}, since=dateTimeToUnixTime(range[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[[1569168000000, 0.00254, 0.002544, 0.00254, 0.00254, 2363.05615391534],\n",
       " [1569171600000, 0.002542, 0.002553, 0.002537, 0.00254, 1831.4285314910496],\n",
       " [1569175200000, 0.00254, 0.00254, 0.00253, 0.002535, 1354.9719272751552],\n",
       " [1569178800000, 0.002529, 0.002545, 0.002528, 0.002538, 1860.8520037460162],\n",
       " [1569182400000, 0.002535, 0.00254, 0.002535, 0.00254, 2141.3644061059063],\n",
       " [1569186000000, 0.002537, 0.00259, 0.002521, 0.002589, 23803.360643332322],\n",
       " [1569189600000, 0.002589, 0.002597, 0.002583, 0.002583, 3623.772092035654],\n",
       " [1569193200000, 0.002571, 0.002571, 0.002567, 0.002567, 28.89564338033988],\n",
       " [1569196800000, 0.002571, 0.002572, 0.002546, 0.002547, 5280.5586329815405],\n",
       " [1569200400000, 0.002541, 0.00255, 0.002517, 0.002522, 6480.144910244407]]"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ohlcvData[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "class ItemOfOHLCV:\n",
    "    timestamp: int\n",
    "    open: float\n",
    "    high: float\n",
    "    low: float\n",
    "    close: float\n",
    "    volume: float\n",
    "\"\"\"\n",
    "def convertTimestampToString(timestamp: int):\n",
    "    import datetime\n",
    "    return datetime.datetime.fromtimestamp(timestamp/1000).strftime(\"%Y-%m-%d\")\n",
    "\n",
    "\n",
    "def checkIfTheItemOfOHLCVIsInTheDateRange(item: ItemOfOHLCV, start: str, end: str):\n",
    "    import datetime\n",
    "    itemDate = datetime.datetime.fromtimestamp(item.timestamp/1000)\n",
    "    if itemDate >= datetime.datetime.strptime(start, \"%Y-%m-%d\") and itemDate <= datetime.datetime.strptime(end, \"%Y-%m-%d\"):\n",
    "        return True\n",
    "    return False\n",
    "\n",
    "itemsForEachRange =[[] for _ in dateRangeFor3DaysInEveryStartDayOfMonth]\n",
    "for one in ohlcvData:\n",
    "    item = ItemOfOHLCV()\n",
    "    item.timestamp, item.open, item.high, item.low, item.close, item.volume = one\n",
    "    #print(convertTimestampToString(item.timestamp))\n",
    "    for index, dateRange in enumerate(dateRangeFor3DaysInEveryStartDayOfMonth):\n",
    "        if checkIfTheItemOfOHLCVIsInTheDateRange(item, dateRange[0], dateRange[1]):\n",
    "            itemsForEachRange[index].append(item)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<__main__.ItemOfOHLCV at 0x12abdcfa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12abdcf70>,\n",
       " <__main__.ItemOfOHLCV at 0x12abdcfd0>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7c70>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7fa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12b89f310>,\n",
       " <__main__.ItemOfOHLCV at 0x12bb4cd00>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6040>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6070>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa60a0>]"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "itemsForEachRange[1][:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [],
   "source": [
    "def convertTimestampToDetailString(timestamp: int):\n",
    "    import datetime\n",
    "    return datetime.datetime.fromtimestamp(timestamp/1000).strftime(\"%Y-%m-%d %H:%M:%S\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>timestamp</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2019-10-24 00:00:00</td>\n",
       "      <td>0.002428</td>\n",
       "      <td>0.002442</td>\n",
       "      <td>0.002380</td>\n",
       "      <td>0.002422</td>\n",
       "      <td>17378.149674</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2019-10-24 01:00:00</td>\n",
       "      <td>0.002425</td>\n",
       "      <td>0.002443</td>\n",
       "      <td>0.002425</td>\n",
       "      <td>0.002443</td>\n",
       "      <td>3811.442302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2019-10-24 02:00:00</td>\n",
       "      <td>0.002444</td>\n",
       "      <td>0.002489</td>\n",
       "      <td>0.002420</td>\n",
       "      <td>0.002431</td>\n",
       "      <td>14802.574014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2019-10-24 03:00:00</td>\n",
       "      <td>0.002429</td>\n",
       "      <td>0.002440</td>\n",
       "      <td>0.002422</td>\n",
       "      <td>0.002433</td>\n",
       "      <td>3046.580145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2019-10-24 04:00:00</td>\n",
       "      <td>0.002430</td>\n",
       "      <td>0.002444</td>\n",
       "      <td>0.002422</td>\n",
       "      <td>0.002429</td>\n",
       "      <td>4386.969989</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>612</th>\n",
       "      <td>2019-11-07 20:00:00</td>\n",
       "      <td>0.002642</td>\n",
       "      <td>0.002723</td>\n",
       "      <td>0.002631</td>\n",
       "      <td>0.002720</td>\n",
       "      <td>93298.523107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>613</th>\n",
       "      <td>2019-11-07 21:00:00</td>\n",
       "      <td>0.002723</td>\n",
       "      <td>0.002749</td>\n",
       "      <td>0.002694</td>\n",
       "      <td>0.002715</td>\n",
       "      <td>89357.069322</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>614</th>\n",
       "      <td>2019-11-07 22:00:00</td>\n",
       "      <td>0.002713</td>\n",
       "      <td>0.002715</td>\n",
       "      <td>0.002686</td>\n",
       "      <td>0.002696</td>\n",
       "      <td>70736.931892</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>615</th>\n",
       "      <td>2019-11-07 23:00:00</td>\n",
       "      <td>0.002687</td>\n",
       "      <td>0.002694</td>\n",
       "      <td>0.002648</td>\n",
       "      <td>0.002650</td>\n",
       "      <td>37707.319691</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>616</th>\n",
       "      <td>2019-11-08 00:00:00</td>\n",
       "      <td>0.002650</td>\n",
       "      <td>0.002670</td>\n",
       "      <td>0.002614</td>\n",
       "      <td>0.002669</td>\n",
       "      <td>27467.471249</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>617 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "               timestamp      open      high       low     close        volume\n",
       "0    2019-10-24 00:00:00  0.002428  0.002442  0.002380  0.002422  17378.149674\n",
       "1    2019-10-24 01:00:00  0.002425  0.002443  0.002425  0.002443   3811.442302\n",
       "2    2019-10-24 02:00:00  0.002444  0.002489  0.002420  0.002431  14802.574014\n",
       "3    2019-10-24 03:00:00  0.002429  0.002440  0.002422  0.002433   3046.580145\n",
       "4    2019-10-24 04:00:00  0.002430  0.002444  0.002422  0.002429   4386.969989\n",
       "..                   ...       ...       ...       ...       ...           ...\n",
       "612  2019-11-07 20:00:00  0.002642  0.002723  0.002631  0.002720  93298.523107\n",
       "613  2019-11-07 21:00:00  0.002723  0.002749  0.002694  0.002715  89357.069322\n",
       "614  2019-11-07 22:00:00  0.002713  0.002715  0.002686  0.002696  70736.931892\n",
       "615  2019-11-07 23:00:00  0.002687  0.002694  0.002648  0.002650  37707.319691\n",
       "616  2019-11-08 00:00:00  0.002650  0.002670  0.002614  0.002669  27467.471249\n",
       "\n",
       "[617 rows x 6 columns]"
      ]
     },
     "execution_count": 188,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def itemDataToListOfDictionaries(itemData: list):\n",
    "    return [{\n",
    "        'timestamp': convertTimestampToDetailString(item.timestamp),\n",
    "        'open': item.open,\n",
    "        'high': item.high,\n",
    "        'low': item.low,\n",
    "        'close': item.close,\n",
    "        'volume': item.volume\n",
    "    } for item in itemData]\n",
    "\n",
    "def itemDataToPandaDataFrame(itemData: list):\n",
    "    import pandas as pd\n",
    "    return pd.DataFrame(itemDataToListOfDictionaries(itemData), columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])\n",
    "\n",
    "testData = itemDataToPandaDataFrame(itemsForEachRange[1])\n",
    "testData"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<__main__.ItemOfOHLCV at 0x12abdcfa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12abdcf70>,\n",
       " <__main__.ItemOfOHLCV at 0x12abdcfd0>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7c70>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7fa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12b89f310>,\n",
       " <__main__.ItemOfOHLCV at 0x12bb4cd00>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6040>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6070>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa60a0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa60d0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6100>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6130>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6160>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6190>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa61c0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa61f0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6220>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6250>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6280>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa62b0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa62e0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6310>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6340>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6370>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa63a0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa63d0>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6400>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6430>,\n",
       " <__main__.ItemOfOHLCV at 0x107aa6460>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4910>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4f10>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe48b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4fd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe48e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4f70>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4fa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4e80>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4e50>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4e20>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4df0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4c70>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4c40>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4c10>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4be0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4bb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4b80>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4b50>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4b20>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4af0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4ac0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4a90>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4a60>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4a30>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4a00>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe49d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe49a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe43a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe43d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4400>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4430>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4460>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4490>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe44c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe44f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4dc0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4d90>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4d60>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4d30>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4d00>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4cd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4ca0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4970>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4940>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbe4f40>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97820>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97640>,\n",
       " <__main__.ItemOfOHLCV at 0x107a974c0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97520>,\n",
       " <__main__.ItemOfOHLCV at 0x107a977f0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97d00>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97cd0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97340>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97430>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97d30>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97160>,\n",
       " <__main__.ItemOfOHLCV at 0x107a972b0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97460>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97250>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97280>,\n",
       " <__main__.ItemOfOHLCV at 0x107a970a0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97130>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97190>,\n",
       " <__main__.ItemOfOHLCV at 0x107a971c0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97070>,\n",
       " <__main__.ItemOfOHLCV at 0x107a970d0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a971f0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a973a0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a978e0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97490>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97ca0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a976d0>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97c70>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97a60>,\n",
       " <__main__.ItemOfOHLCV at 0x107a97400>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdee80>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdeeb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdeee0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdef10>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdefa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdef70>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdee50>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdefd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12bbdef40>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80040>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80070>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae800a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae800d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80100>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80130>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80160>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80190>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae801c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae801f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80220>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80250>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80280>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae802b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae802e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80310>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80340>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80370>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae803a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae803d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80400>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80430>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80460>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80490>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae804c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae804f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80520>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80550>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80580>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae805b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae805e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80610>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80640>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80670>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae806a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae806d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80700>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80730>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80760>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80790>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae807c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae807f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80820>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80850>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80880>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae808b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae808e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80910>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80940>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80970>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae809a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae809d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80a00>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80a30>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80a60>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80a90>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80ac0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80af0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80b20>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80b50>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80b80>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80bb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80be0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80c10>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80c40>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80c70>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80ca0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80cd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80d00>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80d30>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80d60>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80d90>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80dc0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80df0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80e20>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80e50>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80e80>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80eb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80ee0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80f10>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80f40>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80f70>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80fa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12ae80fd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb040>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb070>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb0a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb0d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb100>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb130>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb160>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb190>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb1c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb1f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb220>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb250>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb280>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb2b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb2e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb310>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb340>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb370>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb3a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb3d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb400>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb430>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb460>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb490>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb4c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb4f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb520>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb550>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb580>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb5b0>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba79d0>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7b80>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb5e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb610>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb640>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb670>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb6a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb6d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb700>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb730>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb760>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb790>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb7c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb7f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb820>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb850>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb880>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb8b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb8e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb910>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb940>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb970>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb9a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceb9d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceba00>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceba30>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceba60>,\n",
       " <__main__.ItemOfOHLCV at 0x12aceba90>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebac0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebaf0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebb20>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebb50>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebb80>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebbb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebbe0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebc10>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebc40>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebc70>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebca0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebcd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebd00>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebd30>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebd60>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebd90>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebdc0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebdf0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebe20>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebe50>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebe80>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebeb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebee0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebf10>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebf40>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebf70>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebfa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acebfd0>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7be0>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7d30>,\n",
       " <__main__.ItemOfOHLCV at 0x107ba7e50>,\n",
       " <__main__.ItemOfOHLCV at 0x107940490>,\n",
       " <__main__.ItemOfOHLCV at 0x12ab53760>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7040>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7070>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc70a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc70d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7100>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7130>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7160>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7190>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc71c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc71f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7220>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7250>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7280>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc72b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc72e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7310>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7340>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7370>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc73a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc73d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7400>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7430>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7460>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7490>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc74c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc74f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7520>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7550>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7580>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc75b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc75e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7610>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7640>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7670>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc76a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc76d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7700>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7730>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7760>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7790>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc77c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc77f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7820>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7850>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7880>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc78b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc78e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7910>,\n",
       " <__main__.ItemOfOHLCV at 0x11eaab4c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7940>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7970>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc79d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7a00>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc79a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7a30>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7a60>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7a90>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7ac0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7af0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7b20>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7b50>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7b80>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7bb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7be0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7c10>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7c40>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7c70>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7ca0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7cd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7d00>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7d30>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7d60>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7d90>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7dc0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7df0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7e20>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7e50>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7e80>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7eb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7ee0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7f10>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7f40>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7f70>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7fa0>,\n",
       " <__main__.ItemOfOHLCV at 0x12acc7fd0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594040>,\n",
       " <__main__.ItemOfOHLCV at 0x106594070>,\n",
       " <__main__.ItemOfOHLCV at 0x1065940a0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065940d0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594100>,\n",
       " <__main__.ItemOfOHLCV at 0x106594130>,\n",
       " <__main__.ItemOfOHLCV at 0x106594160>,\n",
       " <__main__.ItemOfOHLCV at 0x106594190>,\n",
       " <__main__.ItemOfOHLCV at 0x1065941c0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065941f0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594220>,\n",
       " <__main__.ItemOfOHLCV at 0x106594250>,\n",
       " <__main__.ItemOfOHLCV at 0x106594280>,\n",
       " <__main__.ItemOfOHLCV at 0x1065942b0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065942e0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594310>,\n",
       " <__main__.ItemOfOHLCV at 0x106594340>,\n",
       " <__main__.ItemOfOHLCV at 0x106594370>,\n",
       " <__main__.ItemOfOHLCV at 0x1065943a0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065943d0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594400>,\n",
       " <__main__.ItemOfOHLCV at 0x106594430>,\n",
       " <__main__.ItemOfOHLCV at 0x106594460>,\n",
       " <__main__.ItemOfOHLCV at 0x106594490>,\n",
       " <__main__.ItemOfOHLCV at 0x1065944c0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065944f0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594520>,\n",
       " <__main__.ItemOfOHLCV at 0x106594550>,\n",
       " <__main__.ItemOfOHLCV at 0x106594580>,\n",
       " <__main__.ItemOfOHLCV at 0x1065945b0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065945e0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594610>,\n",
       " <__main__.ItemOfOHLCV at 0x106594640>,\n",
       " <__main__.ItemOfOHLCV at 0x106594670>,\n",
       " <__main__.ItemOfOHLCV at 0x1065946a0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065946d0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594700>,\n",
       " <__main__.ItemOfOHLCV at 0x106594730>,\n",
       " <__main__.ItemOfOHLCV at 0x106594760>,\n",
       " <__main__.ItemOfOHLCV at 0x106594790>,\n",
       " <__main__.ItemOfOHLCV at 0x1065947c0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065947f0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594820>,\n",
       " <__main__.ItemOfOHLCV at 0x106594850>,\n",
       " <__main__.ItemOfOHLCV at 0x106594880>,\n",
       " <__main__.ItemOfOHLCV at 0x1065948b0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065948e0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594910>,\n",
       " <__main__.ItemOfOHLCV at 0x106594940>,\n",
       " <__main__.ItemOfOHLCV at 0x106594970>,\n",
       " <__main__.ItemOfOHLCV at 0x1065949a0>,\n",
       " <__main__.ItemOfOHLCV at 0x1065949d0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594a00>,\n",
       " <__main__.ItemOfOHLCV at 0x106594a30>,\n",
       " <__main__.ItemOfOHLCV at 0x106594a60>,\n",
       " <__main__.ItemOfOHLCV at 0x106594a90>,\n",
       " <__main__.ItemOfOHLCV at 0x106594ac0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594af0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594b20>,\n",
       " <__main__.ItemOfOHLCV at 0x106594b50>,\n",
       " <__main__.ItemOfOHLCV at 0x106594b80>,\n",
       " <__main__.ItemOfOHLCV at 0x106594bb0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594be0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594c10>,\n",
       " <__main__.ItemOfOHLCV at 0x106594c40>,\n",
       " <__main__.ItemOfOHLCV at 0x106594c70>,\n",
       " <__main__.ItemOfOHLCV at 0x106594ca0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594cd0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594d00>,\n",
       " <__main__.ItemOfOHLCV at 0x106594d30>,\n",
       " <__main__.ItemOfOHLCV at 0x106594d60>,\n",
       " <__main__.ItemOfOHLCV at 0x106594d90>,\n",
       " <__main__.ItemOfOHLCV at 0x106594dc0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594df0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594e20>,\n",
       " <__main__.ItemOfOHLCV at 0x106594e50>,\n",
       " <__main__.ItemOfOHLCV at 0x106594e80>,\n",
       " <__main__.ItemOfOHLCV at 0x106594eb0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594ee0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594f10>,\n",
       " <__main__.ItemOfOHLCV at 0x106594f40>,\n",
       " <__main__.ItemOfOHLCV at 0x106594f70>,\n",
       " <__main__.ItemOfOHLCV at 0x106594fa0>,\n",
       " <__main__.ItemOfOHLCV at 0x106594fd0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f040>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f070>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f0a0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f0d0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f100>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f130>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f160>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f190>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f1c0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f1f0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f220>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f250>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f280>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f2b0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f2e0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f310>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f340>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f370>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f3a0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f3d0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f400>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f430>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f460>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f490>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f4c0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f4f0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f520>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f550>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f580>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f5b0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f5e0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f610>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f640>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f670>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f6a0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f6d0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f700>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f730>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f760>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f790>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f7c0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f7f0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f820>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f850>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f880>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f8b0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f8e0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f910>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f940>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f970>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f9a0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658f9d0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fa00>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fa30>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fa60>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fa90>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fac0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658faf0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fb20>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fb50>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fb80>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fbb0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fbe0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fc10>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fc40>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fc70>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fca0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fcd0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fd00>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fd30>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fd60>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fd90>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fdc0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fdf0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fe20>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fe50>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fe80>,\n",
       " <__main__.ItemOfOHLCV at 0x10658feb0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658fee0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658ff10>,\n",
       " <__main__.ItemOfOHLCV at 0x10658ff40>,\n",
       " <__main__.ItemOfOHLCV at 0x10658ff70>,\n",
       " <__main__.ItemOfOHLCV at 0x10658ffa0>,\n",
       " <__main__.ItemOfOHLCV at 0x10658ffd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c040>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c070>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c0a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c0d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c100>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c130>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c160>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c190>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c1c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c1f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c220>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c250>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c280>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c2b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c2e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c310>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c340>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c370>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c3a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c3d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c400>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c430>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c460>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c490>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c4c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c4f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c520>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c550>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c580>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c5b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c5e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c610>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c640>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c670>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c6a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c6d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c700>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c730>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c760>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c790>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c7c0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c7f0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c820>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c850>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c880>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c8b0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c8e0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c910>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c940>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c970>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c9a0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23c9d0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23ca00>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23ca30>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23ca60>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23ca90>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cac0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23caf0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cb20>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cb50>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cb80>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cbb0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cbe0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cc10>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cc40>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cc70>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cca0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23ccd0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cd00>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cd30>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cd60>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cd90>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cdc0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23cdf0>,\n",
       " <__main__.ItemOfOHLCV at 0x12a23ce20>]"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "itemsForEachRange[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [],
   "source": [
    "import plotly.graph_objects as go\n",
    "\n",
    "figureList = []\n",
    "\n",
    "for items in itemsForEachRange:\n",
    "    if len(items) == 0:\n",
    "        continue\n",
    "\n",
    "    df = itemDataToPandaDataFrame(items)\n",
    "\n",
    "    fig = go.Figure(data=go.Ohlc(x=df['timestamp'],\n",
    "                            open=df['open'],\n",
    "                            high=df['high'],\n",
    "                            low=df['low'],\n",
    "                            close=df['close']))\n",
    "\n",
    "    fig.update_layout(height=600, width=600, title_text=f\"{TOKEN} on {convertTimestampToString(items[0].timestamp)}~{convertTimestampToString(items[-1].timestamp)}\")\n",
    "    figureList.append(fig)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [],
   "source": [
    "def figures_to_html(figs, filename=\"1.dogePrice.html\"):\n",
    "    dashboard = open(filename, 'w')\n",
    "    dashboard.write(\"<html><head></head><body>\" + \"\\n\")\n",
    "    for fig in figs:\n",
    "        inner_html = fig.to_html().split('<body>')[1].split('</body>')[0]\n",
    "        dashboard.write(inner_html)\n",
    "    dashboard.write(\"</body></html>\" + \"\\n\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [],
   "source": [
    "figures_to_html(figureList)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "7b72adbd49a3b3355baa2266f96b23c2fc51277f72701eff913cb4147c8895c1"
  },
  "kernelspec": {
   "display_name": "Python 3.9.7 64-bit ('.venv': poetry)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
